package delphorm.web.validateur;

import java.util.regex.Pattern;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import delphorm.entite.personne.Utilisateur;
import delphorm.service.personne.IPersonne;
import delphorm.web.forms.AjouterUtilisateurFormulaire;

/**
 * Permet de valider les données pour les controller AjouterUtilisateur et
 * EditerUtilisateur.
 * 
 * @author jerome
 * @see delphorm.web.controller.AjouterUtilisateurFull
 *      delphorm.web.controller.EditerUtilisateur
 */
public class ModifierEtatQuestionnaireValidateur implements Validator {
	private IPersonne servicePersonne;

	public IPersonne getServicePersonne() {
		return servicePersonne;
	}

	public void setServicePersonne(IPersonne servicePersonne) {
		this.servicePersonne = servicePersonne;
	}

	public boolean supports(Class classe) {

		return classe.isAssignableFrom(AjouterUtilisateurFormulaire.class);
	}

	/**
	 * <ul>
	 * <li>login: obligatoire et entre 6 et 20 caractères</li>
	 * <li>password: obligatoire, entre 6 et 20 caractères et doit être égal à
	 * passwordConfirm</li>
	 * <li>adresseElectronique: entre 2 et 50 cartactères et au bon format</li>
	 * </ul>
	 * 
	 * @param obj
	 *            est de type AjouterUtilisateurFormulaire
	 */
	public void validate(Object obj, Errors errors) {
		AjouterUtilisateurFormulaire formulaire = (AjouterUtilisateurFormulaire) obj;

		// verification du login
		String login = formulaire.getLogin();
		if (login == null || login.trim().length() == 0) // obligatoire
		{
			errors.rejectValue("login",
					"AjouterUtilisateurFormulaire.login.necessaire");
		}

		else { // vérifier si le login n'est pas déjà utilisé
			Utilisateur u = servicePersonne.chercherUtilisateurParLogin(login);
			if (u != null) {
				errors.rejectValue("login",
						"AjouterUtilisateurFormulaire.login.dejautilise");
			}
		}

		// verification du mot de passe
		String password = formulaire.getPassword();
		if (password == null || password.trim().length() == 0) // obligatoire
		{
			errors.rejectValue("password",
					"AjouterUtilisateurFormulaire.password.necessaire");
		} else if (password.trim().length() < 6) // au moins 6 caractères
		{
			errors.rejectValue("password",
					"AjouterUtilisateurFormulaire.password.mauvais");
		} else {
			// les mots de passe doivent être identiques
			String passwordConfirm = formulaire.getPasswordConfirm();
			if (!password.equals(passwordConfirm)) {
				errors.rejectValue("passwordConfirm",
						"AjouterUtilisateurFormulaire.passwordConfirm.mauvais");
			}
		}
		// adresse electronique
		String adresseElectronique = formulaire.getAdresseElectronique();

		/*
		 * Si l'adresse électronique n'est pas vide et au mauvais format
		 */
		if (adresseElectronique != null
				&& adresseElectronique.trim().length() != 0
				&& !Pattern.matches("\\S+@{1}?\\S+\\.\\w{2,}?",
						adresseElectronique)) {
			errors.rejectValue("adresseElectronique",
					"AjouterUtilisateurFormulaire."
							+ "adresseElectronique.mauvaisformat");
		}

	}

}
